Realistic lighting is an important component of high quality computer rendered graphics. By utilizing a renderer employing a global illumination model, scenes can be provided with convincing reflections and shadows, providing the requisite visual detail demanded by feature length animated films and other content. Conventionally, a ray tracing renderer may be utilized to provide global illumination in a simple manner. However, with large processing overhead and highly random data access requirements, ray tracing places a heavy processing demand for complex scenes with larger amounts of data, as with feature films and other demanding content.
Typically, when using global illumination in a rendered scene, ray tracing is used to handle light being reflected multiple times before reaching a viewpoint and hit points of rays are recorded and shaded. Accordingly, to keep rendering times manageable and to handle multiple or diffuse reflections, a renderer needs to efficiently order and shade rays in rendered graphics. Conventionally, rays become spread out and incoherent when handling diffuse reflections. Previously, shading caches have been used to amortize cost of incoherent shading, however this limits the effects that can be achieved due to the high cost of memory reads resulting from caches misses. For example, textures typically do not fit in a memory and a cache is required. While large texture caches may be used to cover incoherent texture access, this means that a large percentage of accesses will result in cache misses, incurring high latency to load the texture data into memory.